Who should write your automated acceptance tests?
Programmers should write your automated acceptance tests
If you're a solo tester in an agile team, like me, you really have no choice but have the programmers take responsibility for writing and maintaining automated acceptance tests. You'll be so busy with acceptance criteria, story and exploratory testing, you just won't have time.
The benefits of having the programmers in your team writing and maintaining these tests is that they will be maintained and executed as soon as any change occurs, so they'll be kept more up to date and less likely to go stale. They'll also be more useful in providing fast feedback to a programmer working on a change to a specific screen as the programmer can run the relevant acceptance tests, make a change and then ensure the acceptance tests still pass. If a tester were responsible for the automated acceptance tests, there is a lag between updating your application and your tests, which, if not properly managed, can lead of many tests repeatedly failing and spurious test results.
Programmers will have a better understanding of the architecture of your application and will be able to build testability features in so that the automated acceptance tests are more efficient and reliable.
Testers should write your automated acceptance tests
Software testers are particularly good at building automated acceptance tests that cover an end-to-end process in the system; often called user journeys. This is because they have a good understanding of the journey whereas a programmer may only understand the logic behind a particular screen. Testers should be involved in writing this style of acceptance tests so they are representative of real usage.
Some software testers are particularly good at knowing how to automate a web browser. Understanding how browsers work from an automation perspective is a highly developed skill that many testers have and having this skill leads to a more resilient automated acceptance test suite that wait for enough, but not too much, time for elements to appear and update.
Software testers are also very good at interpreting automated acceptance test results and investigating whether a bug exists or whether the tests need updating. If the tester is doing this work, then it makes sense for them to update the automated acceptance tests as needed.